'''
@Project ：my_python_project 
@File    ：04.控制文件指针的移动.py
@IDE     ：PyCharm 
@Author  ：xionglinhui
@Date    ：2024/7/23 下午6:41 
'''

'''案例1'''
#指针移动的单位都是以bytes/字节为单位
# 只有一种情况特殊：
#       t模式下的read(n),n代表的是字符个数

# with open('aaa.txt', mode='rt', encoding='utf-8') as f:
#     res=f.read(4)
#     print(res)   # >>结果：abc你


'''案例2'''
# 模式0：参照物是文件开头位置
# f.seek(9,0)
# f.seek(3,0) # 3

# 模式1：参照物是当前指针所在位置
# f.seek(9,1)
# f.seek(3,1) # 12

# 模式2：参照物是文件末尾位置，应该倒着移动
# f.seek(-9,2) # 3
# f.seek(-3,2) # 9

# 强调：只有0模式可以在t下使用，1、2必须在b模式下用

#0模式
# with open('ccc.txt',mode='rb') as f:
#     f.seek(4,0)
#     print(f.tell())  # 读出的指针在第4个字节位置
#     res=f.read()
#     print(res.decode('utf-8')) #超出了范围，第4个字节正好在“你”的位置，而“你”这个中文占用三个字节

#1模式
# with open('aaa.txt',mode='rb') as f:
#     f.seek(9,1)
#     f.seek(30,1)
#     print(f.tell())  # 12

    # f.seek(12, 1)  # 12
    # print(f.tell())

with open('aaa.txt',mode='rb') as f:
    f.seek(-9,2)    #从文件末尾往左移动9个字节，结果为 0
    print(f.tell())
    f.seek(-3,2)    #从文件末尾往左移动3个字节，结果为 6
    print(f.tell())
    print(f.read().decode('utf-8'))  #  结果： 好

